package cz.fimuni.pa165.backendderby.dao;


import cz.fimuni.pa165.backendderby.entities.Car;
import java.util.List;

/**
 *
 * @author Andrej Hraško
 */
public interface CarDAO {
    
    /**
     * Vytvorí záznam v tabuľke áut s atribútami zadaného parametru.
     * 
     * @param car Objekt typu Car.
     */
    public void createCar(Car car);
    
    /**
     * Vráti list všetkých áut uložených v databáze.
     * 
     * @return List všetkých áut v databáze.
     */
    public List<Car> getAllCars();
    
    /**
     * V tabuľke Cars vyhľadá záznam so zadaným menom.
     * Údaje vráti uložené v objekte Car.
     * 
     * @param name Meno hľadaného záznamu.
     * @return Objekt typu Car ak záznam existuje, inak null.
     */
    public List<Car> getCar(String spz);
    
    /**
     * Vyhľadá v tabuľke Cars záznam podľa ID parametru a následne upraví jeho 
     * parametre podľa parametrov parametru.
     * 
     * @param car Auto, ktorého údaje majú byť upravené.
     * @return true, ak update prebehne úspešne.Inak false.
     */
    public boolean update(Car car);
    
    /**
     * Vyhľadá v tabuľke Cars záznam podľa ID parametru a následne
     * ho vymaže z databázy.
     * 
     * @param car Auto, ktoré má byť odstránené.
     */
    public void remove(Car car);
    
   
    /**
     * Vrátí všechny dostupná auta
     * @return List<Car> všech dostupných aut
     */
    public List<Car> getAllAvailibleCars();
    
    /**
     * Vyhľadá auto podľa id a údaje vráti v objekte CarDTO.
     * @param id Id hľadaného auta.
     * @return objekt typu CarDTO. Null, ak auto neexistuje.
     */
    public Car find(Long id);
    
    /**
     * Vykoná príslušný dotaz nad tabuľkou s autami
     * @param query dotaz, ktorý sa má vykonať
     * @return List<Car> všetkých áut, ktoré sa vrátili po vykonaní dotazu
     */
    public List<Car> processQuery(String query);
}
